package com.weimin.mqtt.server.listener;

import com.weimin.mqtt.server.model.MqttSession;
import com.weimin.mqtt.server.model.MqttSessionPublishMessage;

import java.util.List;
import java.util.Set;

public interface IMqttSessionListener {

    /**
     * 客户端离线后触发，请不要在这个函数里添加耗时操作
     */
    default void offline(String clientId, MqttSession mqttSession) {
    }

    ;

    /**
     * 接收到客户端返回的消息后触发，请不要在这个函数里添加耗时操作
     *
     * @param publishMessage 客户端发布消息
     */
    default void onMessage(MqttSessionPublishMessage publishMessage) {
    }

    ;

    /**
     * 客户端上线后触发，请不要在这个函数里添加耗时操作
     */
    default void online(String clientId, MqttSession mqttSession) {
    }

    ;

    /**
     * 客户端订阅主题触发
     *
     * @param clientId  客户端ID
     * @param newTopics 新订阅主题
     * @param allTopic  所有订阅主题
     */
    default void onSubTopics(String clientId, Set<String> newTopics, Set<String> allTopic) {
    }

    /**
     * 客户端取消订阅主题触发
     *
     * @param clientId 客户端ID
     * @param topics   需要取消的主题
     * @param allTopic 剩余所有主题
     */
    default void onUnSubTopics(String clientId, List<String> topics, Set<String> allTopic) {
    }

}
